iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

gRPC通訊框架認識與實作系列 第 10

gRPC通訊框架認識與實作【Day 10】

  • 分享至 

  • xImage
  •  

今天已經來到第十天啦!! 沒想到我可以撐到現在QQ

那麼今天就要來做Client端啦!!
首先我們要使用gRPC_Client,如果忘記可以回頭去看這裡,接著一樣將原本的入口刪掉,設置一個新的資料夾Client,之後我們其他的Client都會建在這個資料夾底下,並新增一個新的class,取名叫Client01。
首先先設計連線通道

//設計好連線資訊
String host = "localhost";
int port = 5000;
//通訊管道建立
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host,port).usePlaintext().build();

調用ManagedChannelBuilder中的forAddress輸入指定的IP跟port號,調用usePlaintext()表示要使用文本傳遞,最後調用build()建立連線。

我們可以透過判斷該連線是否存在判定我們通道是否有建立起來,所以可以這樣寫:

if (managedChannel != null && !managedChannel.isShutdown())
    System.out.println(" channel build success !! " + host + ":" + port);

可以嘗試著執行程式讓他連線看看,要先記得開啟server端,如果能夠成功印出連線內容,那就表示可以連線成功。

然後我們要開始設計Client內部了,首先先調用IronManServiceGrpc中的newBlockingStub(),這是一個同步的傳遞方式,有人可能會問,有同步那是不是就會有非同步,這個等之後會一併說明,我們先繼續往下操作:

//透過通道連線
IronManServiceGrpc.IronManServiceBlockingStub ironManServiceFutureStub = IronManServiceGrpc.newBlockingStub(managedChannel);
//調用gRPC完成

//準備request參數
IronManProto.IronManRequest01.Builder builder = IronManProto.IronManRequest01.newBuilder();
builder.setName("IronMan");
builder.setAge(String.valueOf(28));
IronManProto.IronManRequest01 ironManRequest01 = builder.build();

//傳遞資料並準備接收server端回傳的response
IronManProto.IronManResponse01 ironManResponse01 = ironManServiceFutureStub.ironMan01(ironManRequest01);
String result = ironManResponse01.getResult();
System.out.println("我是response: " + result);

//關閉連線
managedChannel.shutdown();

準備好要傳遞出去的訊息,我們調用IronManProto中的IronManRequest01.newBuilder(),建立新的訊息。
使用set函數將資料設定好,最後再把資料包裹進Request中,到這裡,我們就準備好傳送資料了。

我們在server收到資料後還會回傳一個response,所以我們要接收response,調用ironManServiceFutureStub.ironMan01,也就是我們當初設定好的server端接口中的ironMan01函式,把我們的ironManRequest01丟進去後,server接收到request,server就回傳一個response給Client,最後再將整個連線關閉。這樣我們就完成了一次資料的傳遞跟回傳。

我們來實際傳遞一次資料,看看結果會是什麼樣子
首先先開啟server端,再開啟client端將訊息打過去
先看看server端這邊收到什麼
https://ithelp.ithome.com.tw/upload/images/20230915/20147417ABtl8b1oeH.jpg
再看看client端這邊收到了什麼
https://ithelp.ithome.com.tw/upload/images/20230915/20147417fl5oyXOMou.jpg

到此,我們就完成第一次的client-server溝通囉!! 接下來會再帶大家實作其他種類的傳遞方式~


上一篇
gRPC通訊框架認識與實作【Day 09】
下一篇
gRPC通訊框架認識與實作【Day 11】
系列文
gRPC通訊框架認識與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言